#ifndef ES_USART_H_
#define ES_USART_H_


#include "stm_std_lib.h"


//中断响应函数指针定义
typedef void(*usart_it_handler)(u16 val);



//串口类型定义
enum UsartType { uart1, uart2 };
/**

使用USART1

PA9为Tx
PA10为Rx


使用USART2

PA2为Tx
PA3为Rx
**/
class CUsart {


public:


	//串口数据位长 (USART_WordLength_8b 或 USART_WordLength_9b)
	uint16_t WordLength;

	//停止位
	uint16_t StopBits;

	//奇偶校验位
	uint16_t Parity;
	

	CUsart();

	
	//初始化
	//bitRate:速率
	//uart: uart1或uart2
	//usingInterrupt:是否使用中断(接收中断)	
	//使用中断时, 应调用SetUsartItListener设置接收中断观察者
	//使用中断时，Read、ReadLine及HasReciData函数无效
	void Init(int bitRate, UsartType uart, u8 usingInterrupt);



	//设置接收中断观察者,此函数应在Init之后调用
	void SetUsartItListener(usart_it_handler handler);


	//发送字符串
	void Write(char* buf, u16 len);

	//发送byte
	void Write(u8* buf, u16 len);

	//发送buffer中所有数据
	void Write(u16* buf, u16 len);

	void Write(u16 data);





private:
	UsartType uartNum;
	u8 isUsingInterrupt;


	void RCC_Config();


	void GPIO_Config();


	void NVIC_Configuration();


	void USART_Config(int bitRate);
	
};



#endif
